(function () {
    var qiniu = require("qiniu");
    var qiniu_config = require("./config/qiniu.conf.json");

    // 需要填写你的 Access Key 和 Secret Key
    qiniu.conf.ACCESS_KEY = qiniu_config.ACCESS_KEY;
    qiniu.conf.SECRET_KEY = qiniu_config.SECRET_KEY;

    // 要上传的空间
    var bucket = qiniu_config.BUCKET;
    // 七牛云存储标准地址
    global.qiniu_server_url = qiniu_config.SERVER_URL;

    // 上传到七牛后保存的文件名
    // key = 'my-nodejs-logo.png';

    // 构建上传策略函数，设置回调的url以及需要回调给业务服务器的数据
    function uptoken(key) {
        var putPolicy = new qiniu.rs.PutPolicy(bucket + ":" + key);
        // 上传完成的回调地址，默认不启用自定义，交由七牛官方处理上传数据
        // putPolicy.callbackUrl = 'http://apibbs.shengyi8888.com/qiniucallback';
        // putPolicy.callbackBody = 'filename=$(fname)&filesize=$(fsize)';
        return putPolicy.token();
    }

    // 生成上传 Token
    // token = uptoken(bucket, key);

    // 要上传文件的本地路径
    // filePath = './nodejs-logo.png'

    // 构造上传函数,通过创建Promise，处理异步上传工作
    var uploadFile = function (uptoken, key, localFile) {
        return new Promise(function (resolve, reject) {
            var extra = new qiniu.io.PutExtra();
            qiniu.io.putFile(uptoken, key, localFile, extra, function (err, ret) {
                if (!err) {
                    resolve(ret);
                    // 上传成功， 处理返回值
                    // console.log(ret.hash, ret.key, ret.persistentId);
                } else {
                    reject(err);
                    // 上传失败， 处理返回代码
                    // console.log(err);
                }
            });
        });
    };


    // 上传实例
    global.qiniuUpload = co.wrap(function* (savekey, filePath) {
        printData("正在上传图片：", savekey, filePath);
        var key = Math.random().toString(16).substr(2, 6) + (new Date()).getTime().toString(16) + savekey;
        var token = uptoken(key);
        var data = yield uploadFile(token, key, filePath);
        // console.log("data:", data)
        data.server_url = qiniu_server_url;
        printData("七牛图片接口callback:", data);
        return data;
    });

    // 调用uploadFile上传
    // uploadFile(token, key, filePath);
} ());